10. Spring Boot安装

Spring Boot可以跟经典的Java开发工具(Eclipse,IntelliJ等)一起使用或安装成一个命令行工具。不管怎样,你都需要安装Java SDK v1.6 或更高版本。在开始之前,你需要检查下当前安装的Java版本:

$ java -version

如果你是一个Java新手,或只是想体验一下Spring Boot,你可能想先尝试Spring Boot CLI,否则继续阅读“经典”地安装指南。

:尽管Spring Boot兼容Java 1.6,如果可能的话,你应该考虑使用Java最新版本。

10.1. 为Java开发者准备的安装指南

对于java开发者来说,使用Spring Boot就跟使用其他Java库一样,只需要在你的classpath下引入适当的spring-boot-*.jar文件。Spring Boot不需要集成任何特殊的工具,所以你可以使用任何IDE或文本编辑器;同时,Spring Boot应用也没有什么特殊之处,你可以像对待其他Java程序那样运行,调试它。

尽管可以拷贝Spring Boot jars,但我们还是建议你使用支持依赖管理的构建工具,比如Maven或Gradle。

10.1.1. Maven安装

Spring Boot兼容Apache Maven 3.2或更高版本。如果本地没有安装Maven,你可以参考maven.apache.org上的指南。

:在很多操作系统上,可以通过包管理器来安装Maven。OSX Homebrew用户可以尝试brew install maven,Ubuntu用户可以运行sudo apt-get install maven

Spring Boot依赖使用的groupId为org.springframework.boot。通常,你的Maven POM文件会继承spring-boot-starter-parent工程,并声明一个或多个“Starter POMs”依赖。此外,Spring Boot提供了一个可选的Maven插件,用于创建可执行jars。

下面是一个典型的pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>myproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <!-- Inherit defaults from Spring Boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.0.BUILD-SNAPSHOT</version>
    </parent>

    <!-- Add typical dependencies for a web application -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <!-- Package as an executable jar -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <!-- Add Spring repositories -->
    <!-- (you don't need this if you are using a .RELEASE version) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>
</project>

spring-boot-starter-parent是使用Spring Boot的一种不错的方式,但它并不总是最合适的。有时你可能需要继承一个不同的父 POM,或只是不喜欢我们的默认配置,那你可以使用import作用域这种替代方案,具体查看Section 13.2.2, “Using Spring Boot without the parent POM”

10.1.2. Gradle安装

Spring Boot兼容Gradle 1.12或更高版本。如果本地没有安装Gradle,你可以参考www.gradle.org上的指南。

Spring Boot的依赖可通过groupId org.springframework.boot来声明。通常,你的项目将声明一个或多个“Starter POMs”依赖。Spring Boot提供了一个很有用的Gradle插件,可以用来简化依赖声明,创建可执行jars。

:当你需要构建项目时,Gradle Wrapper提供一种给力的获取Gradle的方式。它是一小段脚本和库,跟你的代码一块提交,用于启动构建进程,具体参考Gradle Wrapper

下面是一个典型的build.gradle文件:

buildscript {
    repositories {
        jcenter()
        maven { url "http://repo.spring.io/snapshot" }
        maven { url "http://repo.spring.io/milestone" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.0.BUILD-SNAPSHOT")
    }
}

apply plugin: 'java'
apply plugin: 'spring-boot'

jar {
    baseName = 'myproject'
    version =  '0.0.1-SNAPSHOT'
}

repositories {
    jcenter()
    maven { url "http://repo.spring.io/snapshot" }
    maven { url "http://repo.spring.io/milestone" }
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

10.2. Spring Boot CLI安装

Spring Boot CLI是一个命令行工具,可用于快速搭建基于Spring的原型。它支持运行Groovy脚本,这也就意味着你可以使用类似Java的语法,但不用写很多的模板代码。

Spring Boot不一定非要配合CLI使用,但它绝对是Spring应用取得进展的最快方式(你咋不飞上天呢?)。

10.2.1. 手动安装

Spring CLI分发包可以从Spring软件仓库下载:

  1. spring-boot-cli-1.4.0.BUILD-SNAPSHOT-bin.zip
  2. spring-boot-cli-1.4.0.BUILD-SNAPSHOT-bin.tar.gz

不稳定的snapshot分发包也可以获取到。

下载完成后,解压分发包,根据存档里的INSTALL.txt操作指南进行安装。总的来说,在.zip文件的bin/目录下会有一个spring脚本(Windows下是spring.bat),或使用java -jar运行lib/目录下的.jar文件(该脚本会帮你确保classpath被正确设置)。

10.2.2. 使用SDKMAN安装

SDKMAN(软件开发包管理器)可以对各种各样的二进制SDK包进行版本管理,包括Groovy和Spring Boot CLI。可以从sdkman.io下载SDKMAN,并使用以下命令安装Spring Boot:

$ sdk install springboot
$ spring --version
Spring Boot v1.4.0.BUILD-SNAPSHOT

如果你正在为CLI开发新的特性,并想轻松获取刚构建的版本,可以使用以下命令:

$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-1.4.0.BUILD-SNAPSHOT-bin/spring-1.4.0.BUILD-SNAPSHOT/
$ sdk default springboot dev
$ spring --version
Spring CLI v1.4.0.BUILD-SNAPSHOT

这将会安装一个名叫dev的本地spring实例,它指向你的目标构建位置,所以每次你重新构建Spring Boot,spring都会更新为最新的。

你可以通过以下命令来验证:

$ sdk ls springboot

================================================================================
Available Springboot Versions
================================================================================
> + dev
* 1.4.0.BUILD-SNAPSHOT

================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

10.2.3. 使用OSX Homebrew进行安装

如果你的环境是Mac,并使用Homebrew,想要安装Spring Boot CLI只需以下操作:

$ brew tap pivotal/tap
$ brew install springboot

Homebrew将把spring安装到/usr/local/bin下。

:如果该方案不可用,可能是因为你的brew版本太老了。你只需执行brew update并重试即可。

10.2.4. 使用MacPorts进行安装

如果你的环境是Mac,并使用MacPorts,想要安装Spring Boot CLI只需以下操作:

$ sudo port install spring-boot-cli

10.2.5. 命令行实现

Spring Boot CLI启动脚本为BASHzsh shells提供完整的命令行实现。你可以在任何shell中source脚本(名称也是spring),或将它放到用户或系统范围内的bash初始化脚本里。在Debian系统中,系统级的脚本位于/shell-completion/bash下,当新的shell启动时该目录下的所有脚本都会被执行。如果想要手动运行脚本,假如你已经安装了SDKMAN,可以使用以下命令:

$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring
$ spring <HIT TAB HERE>
  grab  help  jar  run  test  version

:如果你使用Homebrew或MacPorts安装Spring Boot CLI,命令行实现脚本会自动注册到你的shell。

10.2.6. Spring CLI示例快速入门

下面是一个相当简单的web应用,你可以用它测试Spring CLI安装是否成功。创建一个名叫app.groovy的文件:

@RestController
class ThisWillActuallyRun {

    @RequestMapping("/")
    String home() {
        "Hello World!"
    }

}

然后只需在shell中运行以下命令:

$ spring run app.groovy

:首次运行该应用将会花费一些时间,因为需要下载依赖,后续运行将会快很多。

使用你最喜欢的浏览器打开localhost:8080,然后就可以看到如下输出:

Hello World!

10.3. 版本升级

如果你正在升级Spring Boot的早期发布版本,那最好查看下project wiki上的"release notes",你会发现每次发布对应的升级指南和一个"new and noteworthy"特性列表。

想要升级一个已安装的CLI,你需要使用合适的包管理命令,例如brew upgrade;如果是手动安装CLI,按照standard instructions操作并记得更新你的PATH环境变量以移除任何老的引用。